package com.kunpan.admin.async;

import com.kunpan.admin.common.redis.RedisCache;
import com.kunpan.admin.entity.User;
import com.kunpan.admin.mapper.UserMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.security.SecureRandom;
import java.util.Date;


@Service
public class AsyncService {

    private final Logger log = LoggerFactory.getLogger(AsyncService.class);

    @Autowired
    private UserMapper userMapper;

//    @Autowired
//    private RedisCache redisCache;

    // 改进后：使用SecureRandom
    private static final SecureRandom RANDOM = new SecureRandom();

//    @Async("taskExecutor") // 定义一个异步方法
//    public void sendEmail(String email, String codeKey, String title) {
//
//        // 在日志输出时进行脱敏
//        log.info("Sending email to: {}", maskEmail(email));
//        String text = "验证码:";
//        SimpleMailMessage message = new SimpleMailMessage();
//        // 邮件发送人
//        message.setFrom(javaMailSender);
//        // 邮件接收人（可以使用 String[] 发送给多个用户）
//        message.setTo(email);
//        String code = generateCode();
//        text = text + code + " 有效时间一分钟";
//        // 邮件标题
//        message.setSubject(title);
//        // 邮件内容
//        message.setText(text);
//        // 发送邮件
//        mailConfig.createMailSender(null, null).send(message);
//        //将验证码存在缓存中,以邮箱作为键
//        redisCache.setCacheObject(email, String.valueOf(code));
//        //设置验证码1分钟过期
//        redisCache.expire(email, 60);
//        //获取当前用户发送验证码的次数
//        Integer sendCount = redisCache.<Integer>getCacheObject(codeKey);
//        //加一
//        redisCache.setCacheObject(codeKey, sendCount + 1);
//        //设置2分钟过期
//        redisCache.expire(codeKey, 2 * 60);
//    }
//
//
//    /**
//     * 生成验证码
//     * */
//    public String generateCode() {
//        return String.format("%04d", RANDOM.nextInt(10000));
//    }
//
//    private String maskEmail(String email) {
//        if (email == null) return "";
//        int atIndex = email.indexOf('@');
//        if (atIndex > 2) {
//            return email.substring(0, 2) + "***" + email.substring(atIndex);
//        }
//        return "***" + email.substring(Math.max(0, email.length() - 4));
//    }

    /**
     * 记录用户最后登入时间
     * */
    @Async("taskExecutor")
    public void recordLoginTime(String email, Date now) {
        try {
            User user = new User();
            user.setEmail(email);
            user.setLastLoginTime(now);
            //记录最后登入时间
            userMapper.updateUserInfo(user);
        } catch (Exception e) {
            log.error("更新最后登录时间失败", e);
        }
    }
}
